// 全局操作函数
(function () {
    // 返回错误信息
    global.returnErrorBody = errMsg => {
        return {
            type: "error",
            toString: errMsg || "未知错误"
        };
    };
    global.co = require("co"); // co
    // request body 解析工具
    global.parse = require("co-body");
    // 时间操作工具
    global.moment = require("moment")();
    // fetch工具
    global.fetch = require("node-fetch");
    // json转x-www-form-urlencoded
    global.jsonTOurlencoded = function (json) {
        var str = "";
        // 很原始的方法，仅转换了1级json
        for (key in json) {
            // 如果元素是一个方法，则跳过
            if (json[key] instanceof Function) {
                continue;
            };
            str += key + "=" + json[key] + "&";
        };
        return str;
    };
    // 检验json长度,1级json
    global.checkJsonLength = (json, len) => {
        var _key;
        var length = 0;
        for (key in json) {
            length == 0 ? _key = key : false;
            length++;
        };
        if (len) {
            len <= length ? delete json[_key] : false;
            return json;
        } else {
            return length;
        };
    };

    // bmob
    global.bmob = require("./Bmob.t");
    // qiniu
    require("./qiniu.t");
    global.$ = require("./_$.t");
    require("./_Console.t");
    co(function* () {
        // mongodb
        const MongoClient = require('mongodb').MongoClient;
        global.ObjectID = require('mongodb').ObjectID;
        global.mongo = require("./mongo.t");
        global.db = yield MongoClient.connect('mongodb://127.0.0.1:27017/third_wx_server');


        // 微信
        global.WX = require("./wx.t");
        var WXService = require("../class/wx.core.c");
        WXService.getAll(co.wrap(function* (docs) {
            var promises = WX.pushAccessTokenPromises(docs)
                yield promises;
            setInterval(co.wrap(function* () {
                yield promises;
            }), 6000 * 1000); // 每6000秒重新获取一次AccessToken，官方时效时间为7200秒，保证AccessToken可用
            // 初始化AccessToken
            // 请将计时器放在这段代码前面，yield 之后不能再创建计时器
            app_config.is_dev ? true : yield promises;
            yield WX.createButton()
        }));
        // yield WX.requestAccessToken('dotnar');
        // yield WX.createButton('dotnar')
    }).catch(e => {
        printError(e);
    });
} ());